package com.sjb.sixteen_journey_backend.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.Default;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 用户表
 *
 * @author jcz
 * @since 2024-06-21
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户表的唯一标识
     */
    @TableId(value = "user_id", type = IdType.AUTO)
    private Integer userId;

    /**
     * 用户名称；用户名长度在3-15位，仅支持中文、英文、数字、下划线，用户名180天只能修改一次,
     */
    @TableField("username")
    @NotBlank(groups = {Register.class},message = "用户名称不能为空")
    @Pattern(regexp = "^[a-zA-Z0-9_\u4e00-\u9fa5]{3,15}$", message = "用户名长度在3-15位，仅支持中文、英文、数字、下划线")
    private String username;
    //[a-zA-Z0-9_]：表示匹配大小写字母、数字和下划线中的任意一个字符。
    // \u4e00-\u9fa5：表示匹配中文字符的Unicode范围。
    // {3,15}：表示匹配前面的字符集至少3次，最多15次。
    // $：表示字符串的结束。
    /**
     * 密码(MD5进行加密) 密码至少6位 支持中文、英文、数字
     */
    @TableField("password")
    @NotBlank(groups = {Register.class},message = "密码不能为空")
    @Pattern(regexp = "^[a-zA-Z0-9\u4e00-\u9fa5]{6,}$", message = "密码至少6位 支持中文、英文、数字")
    private String password;

    /**
     * 性别 0:男,1:女;-1为无 默认为-1
     */
    @TableField("gender")
    private Integer gender;

    /**
     * 注册时间
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 用户头像
     */
    @TableField("avatar")
    private String avatar;

    /**
     * 常居地
     */
    @TableField("address")
    private String address;

    /**
     * 纬度
     */
    @TableField("latitude")
//    @NotNull(groups = {Register.class},message = "纬度不能为空")
    private BigDecimal latitude;

    /**
     * 经度
     */
    @TableField("longitude")
//    @NotNull(groups = {Register.class},message = "经度不能为空")
    private BigDecimal longitude;

    /**
     * 签名
     */
    @TableField("signature")
    private String signature;

    /**
     * 手机号
     */
    @TableField("phone")
    private String phone;

    /**
     * 电子邮箱
     */
    @TableField("email")
    @Email
    private String email;

    /**
     * 微信
     */
    @TableField("weChart")
    private String weChart;

    /**
     * 关注量
     */
    @TableField(exist = false)
    private Integer followers;

    /**
     * 粉丝量
     */
    @TableField(exist = false)
    private Integer fans;


    public User withoutPassword() {
        User userWithoutPassword = new User();
        userWithoutPassword.setUserId(this.userId);
        userWithoutPassword.setUsername(this.username);
        userWithoutPassword.setGender(this.gender);
        userWithoutPassword.setCreateTime(this.createTime);
        userWithoutPassword.setAvatar(this.avatar);
        userWithoutPassword.setAddress(this.address);
        userWithoutPassword.setLatitude(this.latitude);
        userWithoutPassword.setLongitude(this.longitude);
        userWithoutPassword.setSignature(this.signature);
        userWithoutPassword.setPhone(this.phone);
        userWithoutPassword.setEmail(this.email);
        userWithoutPassword.setWeChart(this.weChart);
        userWithoutPassword.setFollowers(this.followers);
        userWithoutPassword.setFans(this.fans);
        return userWithoutPassword;
    }
    public interface Register extends Default {

    }
}
